
import router from '@/router'
import { setToken } from '@/utils/auth'
// 是否正在刷新Token的标记
let isRefreshingToken = false
// 重试请求队列，每一项将是一个待执行的函数形式
const requestQueue = []

export default  function RefreshToken(axios,config) {
  if (!isRefreshingToken) {  //判断一下状态
    isRefreshingToken = true    //修改状态，进入刷新token阶段
    return refreshTokenAPI().then(res => { // 获取新Token请求
      const { token } = res.data // 刷新token成功，将最新的token更新到请求header中，同时保存在cookie中
      setToken(token)
      config.headers[Authorization] ='Bearer ' + token//重置当前失败请求Token的配置
      config.baseURL = ''
      requestQueue.forEach(cb => cb(token))//重置请求队列Token
      requestQueue = [] // 清空请求队列
      return axios(config)
    }).catch(() => {
      router.replace({ //刷新请求token失败，跳转到登录页执行退出操作
      path: '/login',
      query: {
        redirect: router.currentRoute.fullPath
      }
    })
     // router.replace(`/login?redirect=${encodeURIComponent(router.currentRoute.fullPath)}`)
     
    }).finally(() => {
      isRefreshingToken = false//完成之后在关闭状态
    })
  } else {// 正在刷新token，返回一个未执行resolve的promise
    return new Promise((resolve) => {
      requestQueue.push((token) => {// 将resolve放进队列，用一个函数形式来保存，等token刷新后直接执行
        config.baseURL = ''
        config.headers[Authorization] ='Bearer ' + token
        resolve(axios(config))
      })
    })
  }
}
  

